package org.example;

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.example.entity.Course;
import org.example.entity.Student;
import org.example.message.CourseOperateMessage;

import java.util.List;

public class Main {


    private static final Logger logger = LogManager.getLogger("Main");

    public static <T> void printList(List<T> list) {
        for (T t : list) {
            System.out.println(t);
        }
    }

    public static void main(String[] args) {
        //TODO 1、创建管理类实例
        logger.info("创建管理类实例");
        StudentManager manager = new StudentManager();

        //TODO 2、初始化管理系统，添加部分学生和课程信息
        logger.info("初始化管理系统，添加部分学生和课程信息");
        SystemInit systemInit = new SystemInit();
        systemInit.init(manager);

        //TODO 3、实现添加学生
        logger.info("实现添加学生");
        //1、创建系统中已存在的学生信息进行添加
        Student student1 = new Student("001", "aaa");
        manager.addStudent(student1);
        //2、创建系统中不存在的学生信息进行添加
        Student student2 = new Student("010", "jjj");
        manager.addStudent(student2);

        //TODO 4、实现添加课程
        logger.info("实现添加课程");
        //1、创建系统中已存在的课程信息进行添加
        Course course1 = new Course("CS001", "数据结构", 5);
        manager.addCourse(course1);
        //2、创建系统中不存在的课程信息进行添加
        Course course2 = new Course("CS008", "算法设计与分析", 3);
        manager.addCourse(course2);

        //TODO 5、显示所有课程信息
        logger.info("显示所有课程信息");
        manager.printAllInformation(StudentManager.COURSE_HASHMAP);

        //TODO 6、学生选课
        logger.info("学生选课");
        //1、进行选课的学生不存在
        manager.studentSelectCourse("011", "CS001");
        //2、进行选课的课程不存在
        manager.studentSelectCourse("001", "CS010");
        //3、该课程在该学生已选课程中
        manager.studentSelectCourse("001", "CS001");
        //4、该课程不在该学生已选课程中
        manager.studentSelectCourse("001", "CS007");

        //TODO 7、学生退课
        logger.info("学生退课");
        //1、进行退课的学生不存在
        manager.studentDropCourse("011", "CS001");
        //2、进行退课的课程不存在
        manager.studentDropCourse("001", "CS010");
        //3、该课程不在该学生已选课程中
        manager.studentDropCourse("001", "CS006");
        //4、该课程在该学生已选课程中
        manager.studentDropCourse("001", "CS007");

        //TODO 8、查询学生选课列表
        logger.info("查询学生选课列表");
        List<String> list = manager.selectElectives("001");
        printList(list);
    }
}